home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / glass / glass.lha / GLASS / tmpas / pasneed.t < prev    next >
Text File  |  1990-10-02  |  7KB  |  226 lines

  1. .. File: pasneed.t
  2. .. CvR
  3. ..
  4. .. Analysis of required code for given set of routines.
  5. .. Given a list of wanted routines and ds definitions in the variable
  6. .. 'wantdefs', construct a list of wanted types for each class of definitions
  7. .. in the variables 'want_<classlist>', and 'want_<classlist>_list' where
  8. .. <classlist> is an element from the list below. Deduce the contents of the
  9. .. variables 'need_<classlist>'. Using knowledge about the definition of
  10. .. the various routines, deduce the required definitions and set them
  11. .. in the variables 'need_<classlist>'.
  12. ..
  13. .. The variables 'need_<classlist>' are restricted to types occurring
  14. .. in ${typelist} and $(otherlists).
  15. ..
  16. .. If the variable 'alldefs' is set, all the variables are simply set to
  17. .. ${typelist}.
  18. ..
  19. .. Some initial checks
  20. .set minvers 23
  21. .if ${< $(tmvers) $(minvers)}
  22. . error ${tplfilename}: at least tm version $(minvers) required.
  23. . exit 1
  24. .endif
  25. .if ${not ${defined basename}}
  26. . error '${tplfilename}': definition of basename required.
  27. . exit 1
  28. .endif
  29. .if ${and ${not ${defined alldefs}} ${not ${defined wantdefs}}}
  30. . error '${tplfilename}': no definitions specified.
  31. . error At least one of 'alldefs' and 'wantdefs' must be set.
  32. . exit 1
  33. .endif
  34. .if ${not ${defined otherlists}}
  35. .set otherlists
  36. .endif
  37. .if ${not ${defined notwantdefs}}
  38. .set notwantdefs
  39. .endif
  40. ..
  41. .. Define the list of definition classes
  42. .set class_list ds New Free Rfre Copy Write Read Cmp
  43. .set class      ds New Free Rfre Copy Write Read App Cmp
  44. .set    miscdefs Stat$(basename)
  45. .append miscdefs Readinteger Writeinteger Cmpinteger Rfreinteger Copyinteger
  46. .append miscdefs Readreal Writereal Cmpreal Rfrereal Copyreal
  47. .append miscdefs Readboolean Writeboolean Cmpboolean Rfreboolean Copyboolean
  48. .append miscdefs Readchar Writechar Cmpchar Rfrechar Copychar
  49. .append miscdefs tmgetc tmreadspc tmneedc tmreadobrac tmreadcbrac
  50. .append miscdefs tmwritec tmreadc
  51. ..
  52. .. Reset all want_<classlist> variables
  53. .foreach v $(class)
  54. .set want_$v
  55. .endforeach
  56. .foreach v $(class_list)
  57. .set want_$v_list
  58. .endforeach
  59. .set want_misc
  60. ..
  61. .if ${defined alldefs}
  62. .. All classes want all types
  63. . foreach v $(class)
  64. .  set want_$v ${typelist}
  65. . endforeach
  66. . foreach v $(class_list)
  67. .  set want_$v_list ${typelist} $(otherlists)
  68. . endforeach
  69. . set want_misc $(miscdefs)
  70. .else
  71. .. Extract the contents of the 'want_<classlist>' variables from the
  72. .. 'wantdefs'.
  73. . set wantdefs ${uniq $(wantdefs)}
  74. . set gotdefs
  75. . foreach v ${rmlist ds $(class)}
  76. .  foreach t ${typelist}
  77. .   if ${index $v$t $(wantdefs)}
  78. .    append want_$v $t
  79. .    append gotdefs $v$t
  80. .   endif
  81. .  endforeach
  82. . endforeach
  83. . foreach t ${typelist}
  84. .  if ${index $t $(wantdefs)}
  85. .   append want_ds $t
  86. .   append gotdefs $t
  87. .  endif
  88. . endforeach
  89. . foreach v ${rmlist ds $(class_list)}
  90. .  foreach t ${typelist} $(otherlists)
  91. .   if ${index $v$tlist $(wantdefs)}
  92. .    append want_$v_list $t
  93. .    append gotdefs $v$tlist
  94. .   endif
  95. .  endforeach
  96. . endforeach
  97. . foreach t ${typelist} $(otherlists)
  98. .  if ${index $tlist $(wantdefs)}
  99. .    append want_ds_list $t
  100. .    append gotdefs $tlist
  101. .  endif
  102. . endforeach
  103. . foreach f $(miscdefs)
  104. .  if ${index $f $(wantdefs)}
  105. .   append want_misc $f
  106. .   append gotdefs $f
  107. .  endif
  108. . endforeach
  109. . set gotdefs ${uniq $(gotdefs)}
  110. . if ${!= ${len $(wantdefs)} ${len $(gotdefs)}}
  111. .  foreach e $(gotdefs)
  112. .   set wantdefs ${rmlist $e $(wantdefs)}
  113. .  endforeach
  114. .  error Can't handle definition: $(wantdefs)
  115. .  exit 1
  116. . endif
  117. .endif
  118. ..
  119. .. Initialize all need_<classlist> variables.
  120. .foreach v $(class)
  121. . set need_$v $(want_$v)
  122. .endforeach
  123. .foreach v $(class_list)
  124. . set need_$v_list $(want_$v_list)
  125. .endforeach
  126. .set need_misc $(want_misc)
  127. ..
  128. .. ** Rfre **
  129. .set need_Rfre ${deptype single ${uniq $(need_Rfre) $(need_Rfre_list)}}
  130. .set need_Rfre_list ${uniq $(need_Rfre_list) ${deptype list $(need_Rfre)}}
  131. .set need_Free ${uniq $(need_Free) $(need_Rfre)}
  132. .set need_Free_list ${uniq $(need_Free_list) $(need_Rfre_list)}
  133. .set need_ds ${uniq $(need_ds) $(need_Rfre)}
  134. .set need_ds_list ${uniq $(need_ds_list) $(need_Rfre_list)}
  135. ..
  136. .. ** Free **
  137. .set need_ds ${uniq $(need_ds) $(need_Free)}
  138. .set need_ds_list ${uniq $(need_ds_list) $(need_Free_list)}
  139. ..
  140. .. ** Copy **
  141. .set need_Copy ${deptype single $(need_Copy_list) $(need_Copy)}
  142. .set need_Copy_list ${uniq $(need_Copy_list) ${deptype list $(need_Copy)}}
  143. .set need_New ${uniq $(need_New) $(need_Copy)}
  144. .set need_New_list ${uniq $(need_New_list) $(need_Copy_list)}
  145. .set need_ds ${uniq $(need_ds) $(need_Copy)}
  146. .set need_ds_list ${uniq $(need_ds_list) $(need_Copy_list)}
  147. ..
  148. .. ** Read **
  149. .set need_Read ${deptype single $(need_Read_list) $(need_Read)}
  150. .set need_Read_list ${uniq $(need_Read_list) ${deptype list $(need_Read)}}
  151. .set need_New ${uniq $(need_New) $(need_Read)}
  152. .set need_New_list ${uniq $(need_New_list) $(need_Read_list)}
  153. .set need_App ${uniq $(need_App) $(need_Read_list)}
  154. .set need_ds ${uniq $(need_ds) $(need_Read)}
  155. .set need_ds_list ${uniq $(need_ds_list) $(need_Read_list)}
  156. ..
  157. .. ** Write **
  158. .set need_Write ${deptype single $(need_Write_list) $(need_Write)}
  159. .set need_Write_list ${uniq $(need_Write_list) ${deptype list $(need_Write)}}
  160. .set need_ds ${uniq $(need_ds) $(need_Write)}
  161. .set need_ds_list ${uniq $(need_ds_list) $(need_Write_list)}
  162. ..
  163. .. ** Cmp **
  164. .set need_Cmp ${deptype single $(need_Cmp_list) $(need_Cmp)}
  165. .set need_Cmp_list ${uniq $(need_Cmp_list) ${deptype list $(need_Cmp)}}
  166. .set need_ds ${uniq $(need_ds) $(need_Cmp)}
  167. .set need_ds_list ${uniq $(need_ds_list) $(need_Cmp_list)}
  168. ..
  169. .. ** New **
  170. .set need_ds ${uniq $(need_ds) $(need_New)}
  171. .set need_ds_list ${uniq $(need_ds_list) $(need_New_list)}
  172. ..
  173. .. ** ds **
  174. .set need_ds ${deptype single $(need_ds) $(need_ds_list)}
  175. .set need_ds_list ${uniq $(need_ds_list) $(need_ds) ${deptype list $(need_ds)}}
  176. ..
  177. .. Enforce notwantdefs
  178. .set notwantdefs ${uniq $(notwantdefs)}
  179. .foreach v ${rmlist ds $(class)}
  180. . foreach t $(need_$v)
  181. .  if ${index $v$t $(notwantdefs)}
  182. .   set need_$v ${rmlist $t $(need_$v)}
  183. .   set want_$v ${rmlist $t $(want_$v)}
  184. .  endif
  185. . endforeach
  186. .endforeach
  187. .foreach t $(need_ds)
  188. . if ${index $t $(notwantdefs)}
  189. .  set need_ds ${rmlist $t $(need_ds)}
  190. .  set want_ds ${rmlist $t $(want_ds)}
  191. . endif
  192. .endforeach
  193. .foreach v ${rmlist ds $(class_list)}
  194. . foreach t $(need_$v_list)
  195. .  if ${index $v$tlist $(notwantdefs)}
  196. .   set need_$v_list ${rmlist $t $(need_$v_list)}
  197. .   set want_$v_list ${rmlist $t $(want_$v_list)}
  198. .  endif
  199. . endforeach
  200. .endforeach
  201. .foreach t $(need_$v_list)
  202. . if ${index $tlist $(notwantdefs)}
  203. .   set need_ds_list ${rmlist $t $(need_ds_list)}
  204. .   set want_ds_list ${rmlist $t $(want_ds_list)}
  205. . endif
  206. .endforeach
  207. .foreach f $(miscdefs)
  208. . if ${index $f $(notwantdefs)}
  209. .  set need_misc ${rmlist $f $(need_misc)}
  210. .  set want_misc ${rmlist $f $(want_misc)}
  211. . endif
  212. .endforeach
  213. ..
  214. .. ** derived definitions **
  215. .if ${index Stat$(basename) $(need_misc)}
  216. .set need_stat ${uniq $(need_New) $(need_Free)}
  217. .set need_stat_list ${uniq $(need_New_list) $(need_Free_list)}
  218. .set want_stat ${uniq $(want_New) $(want_Free)}
  219. .set want_stat_list ${uniq $(want_New_list) $(want_Free_list)}
  220. .else
  221. .set need_stat
  222. .set need_stat_list
  223. .set want_stat
  224. .set want_stat_list
  225. .endif
  226.